package ${package.Service};

import com.github.pagehelper.PageInfo;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
import ${package.Vo}.${table.voName};

/**
 * <p>
 * ${table.comment!} 服务类
 * </p>
 *
 * @author ${author}
 * @since ${date}
 */
<#if kotlin>
interface ${table.serviceName} : ${superServiceClass}<${entity}>
<#else>
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {

    /**
     * 分页查询${table.comment}
     * @param vo        可选条件 <#if table.layuiNameColumn??>${table.layuiNameColumn.alias}(name)</#if>、 <#if table.layuiTimeColumn??>开始时间(startTime)、结束时间(endTime)、</#if>
     * @return          ${table.comment}分页信息
     */
    PageInfo<${entity}> page${table.entityName}(${table.voName} vo);

    /**
     * 列表查询${table.comment}
     * @param vo        可选条件 <#if table.layuiNameColumn??>${table.layuiNameColumn.alias}(name)</#if>、 <#if table.layuiTimeColumn??>开始时间(startTime)、结束时间(endTime)、</#if>
     * @return          ${table.comment}列表信息
     */
    List<${entity}> list${table.entityName}(${table.voName} vo);

    /**
     * excel导入${table.comment}
     * @param file       文件源
     * @param objects    空的 ${entity} 泛型的 arrayList
     * @param request    请求对象
     * @return           已经插入的list集合
     */
    List<${entity}> excel${table.entityName}(MultipartFile file, List<${entity}> objects, HttpServletRequest request);

    /**
     * 添加${table.comment}基础信息
     * @param ${table.layuiEntityName}       ${table.comment}信息
     * @param request   请求对象
     * @return          成功or失败
     */
    boolean add${table.entityName}(${entity} ${table.layuiEntityName}, HttpServletRequest request);

    /**
     * 更新${table.comment}基础信息
     * @param ${table.layuiEntityName}       ${table.comment}信息, 主键信息必填
     * @return          成功or失败
     */
    boolean update${table.entityName}(${entity} ${table.layuiEntityName});

    /**
     * 删除${table.comment}基础信息
     * @param ${table.layuiEntityName}       ${table.comment}信息, 主键信息必填
     * @return          成功or失败
     */
    boolean delete${table.entityName}(${entity} ${table.layuiEntityName});

    /**
     * ${table.comment}excel导出
     * @param vo  页面传入参数(<#if table.layuiNameColumn??>name:${table.layuiNameColumn.alias};</#if><#if table.layuiTimeColumn??>startTime:开始时间;endTime:结束时间</#if> )
     * @param response 响应对象
     * @return   无返回值，通过响应对象响应信息
     * @throws IOException  调用方法可能发生io异常等
     */
    void export${table.entityName}(${table.voName} vo, HttpServletResponse response) throws IOException;
<#if ES_URIS??>

    /**
     * 分页查询${table.comment} => 根据 lasticsearch 查询信息
     * @param vo        可选条件 <#if table.layuiNameColumn??>${table.layuiNameColumn.alias}(name)</#if>、 <#if table.layuiTimeColumn??>开始时间(startTime)、结束时间(endTime)、</#if>
     * @return          ${table.comment}分页信息
     */
    PageInfo<${entity}> page${table.entityName}Es(${table.voName} vo);
</#if>

}
</#if>
